<?php

namespace View;

class Validator {
	
	public static $REGEX_PASSWORD = "/^.*(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/";
	
	// Validerar användarnamn
	public function validate_username($username) {
		
		if (!$this->not_empty($username)) {
			return false;
		}
		
		if (!$this->length($username, 3, 20)) {
			return false;
		}
		
		return true;
		
	}
	
	// Validerar lösenord
	public function validate_password($password) {
		
		if (!$this->not_empty($password)) {
			return false;
		}
		
		if (!$this->length($password, 6)) {
			return false;
		}
		
		if (!preg_match(self::$REGEX_PASSWORD, $password)) {
			return false;
		}
		
		return true;
		
	}
	
	// Kollar om en sträng är tom eller bara innehåller white spaces
	public function not_empty($string) {
		
		$string = trim($string);
		
		if (strlen($string) == 0) {
			return false;
		}
		
		return true;
		
	}
	
	// Kollar om en strängs längd är inom ett angivet intervall
	public function length($string, $min = 0, $max = null) {
		
		if ($max == null) {
			return (strlen($string) >= $min);
		} else {
			return (strlen($string) >= $min && strlen($string) <= $max);
		}
		
	}
	
	public static function test() {
		
		$sut = new Validator();
		
		// Användarnamn
		
		if ($sut->validate_username("")) {
			echo "Fel: Ett tomt användarnamn anses vara giltigt.";
			return false;
		}
		
		if ($sut->validate_username(" ")) {
			echo "Fel: Ett användarnamn med bara white spaces anses vara giltigt.";
			return false;
		}
		
		if ($sut->validate_username("a")) {
			echo "Fel: Ett för kort användarnamn anses vara giltigt.";
			return false;
		}
		
		if ($sut->validate_username("abcdefghijklmnopqrstuvwxyz")) {
			echo "Fel: Ett för långt användarnamn anses vara giltigt.";
			return false;
		}
		
		if (!$sut->validate_username("joakim")) {
			echo "Fel: Ett giltigt användarnamn anses vara ogiltigt.";
			return false;
		}
		
		// Lösenord
		
		if ($sut->validate_password("")) {
			echo "Fel: Ett tomt lösenord anses vara giltigt.";
			return false;
		}
		
		if ($sut->validate_password(" ")) {
			echo "Fel: Ett lösenord med bara white spaces anses vara giltigt.";
			return false;
		}
		
		if ($sut->validate_password("Abc12")) {
			echo "Fel: Ett för kort lösenord anses vara giltigt.";
			return false;
		}
		
		if ($sut->validate_password("abc123")) {
			echo "Fel: Ett lösenord utan en versal anses vara giltigt.";
			return false;
		}
		
		if ($sut->validate_password("ABC123")) {
			echo "Fel: Ett lösenord utan en gemen anses vara giltigt.";
			return false;
		}
		
		if ($sut->validate_password("ABCabc")) {
			echo "Fel: Ett lösenord utan en siffra anses vara giltigt.";
			return false;
		}
		
		if (!$sut->validate_password("Abc123")) {
			echo "Fel: Ett giltigt lösenord anses vara ogiltigt.";
			return false;
		}
		
		echo "Lyckat Validator-test!";
		return true;
		
	}
	
}

?>